#!/usr/bin/env.python
# _*_ coding:utf-8 _*_
# # # # # # # # # # # # # # # # # # # #
#  题目:        users的utils           #
#  姓名:         李吉辉                #
#  时间:    2018年12月21日18:00:04     #
# # # # # # # # # # # # # # # # # # # #


def jwt_response_payload_handler(token, user=None, request=None):
    """重写jwt的响应数据方法"""

    return {
        'token': token,
        "use_id": user.id,
        "username": user.username
    }


from django.contrib.auth.backends import ModelBackend
import re
from .models import User


def get_user_by_account(account):
    """此函数用来动态根据account 来查找用户"""
    try:
        if re.match('^1[3-9]\d{9}$', account):  # 如果匹配成功那就是要做手机号登录
            # 进行 数据库获取   获取手机号
            user = User.objects.get(mobile=account)
        else:
            # 进行 数据库获取   获取用户名
            user = User.objects.get(username=account)
    except User.DoesNotExist:
        return None  # -->这里也可以替换为pass
    else:
        # try正常执行没有报错,执行else
        return user  # 返回查找 到的user


class UsernameMobileAuthBackend(ModelBackend):
    """自定义django用户认证类来使用多账号登录"""

    def authenticate(self, request, username=None, password=None, **kwargs):
        """此方法中要根据username或mobile查找到user对象 还要校验密码是否正确,并返回user """
        # 1.根据用户名或手动号获取到user对象
        user = get_user_by_account(username)  # (动态获取)
        # 2.校验密码是否正确
        if user and user.check_password(password):
            return user

        # ****** 这里不需要返回值,python默认返回是None  ********
